/*
 * @Author: wangchao
 * @Date: 2024-10-04 12:42:21
 * @LastEditors: wangchao
 * @LastEditTime: 2024-10-09 14:05:35
 * @FilePath: \JD-RTT-Driver\applications\u_app_start.c
 * @Description:
 * Copyright (c) 2024 by Bingshan Guardian, All Rights Reserved.
 */
#include "u_app_start.h"
#include "u_app.h"
#include "u_port_io.h"
#include "u_port.h"
#include "u_data.h"

static VAR_APP_START_MODE current_app_start_mode = START_DO_STANDBY;

/**
 * @Description: 获取当前启动模式
 * @Param:
 * @Return:
 */
VAR_APP_START_MODE get_current_app_start_mode(void)
{
    return current_app_start_mode;
}

/**
 * @Description: 设置当前启动模式
 * @Param:
 * @Return:
 */
void set_current_app_start_mode(VAR_APP_START_MODE mode)
{
    current_app_start_mode = mode;
}

/**
 * @Description: 初始充电模式
 * @Param:
 * @Return:
 */

INIT_CHARGE_STEP current_init_charge_step = INIT_CHARGE_STEP_OPERATE_VALVE;

void reset_start_do_initial_charge(void)
{
    ;
}

void handle_start_do_initial_charge(void)
{
    switch (current_init_charge_step)
    {
        case INIT_CHARGE_STEP_OPERATE_VALVE:
            // 操作阀门的代码
            break;

        case INIT_CHARGE_STEP_CHECK_VALVE_STATUS:
            // 检查阀门状态的代码
            break;

        case INIT_CHARGE_STEP_OPERATION_TIMEOUT:
            // 操作阀门超时的代码
            break;

        case INIT_CHARGE_STEP_HMI_FEEDBACK_1:
            // HMI反馈1的代码
            break;

        case INIT_CHARGE_STEP_START_STRATEGY:
            // 启动策略的代码
            break;

        case INIT_CHARGE_STEP_WAIT_FLOW_STABILITY:
            // 等待流量稳定的代码
            break;

        case INIT_CHARGE_STEP_DELAY_WAIT_1:
            // 延时等待1的代码
            break;

        case INIT_CHARGE_STEP_PCS_SET_PARAMS:
            // PCS设定参数的代码
            break;

        case INIT_CHARGE_STEP_START_PCS:
            // 启动PCS的代码
            break;

        case INIT_CHARGE_STEP_HMI_FEEDBACK_2:
            // HMI反馈2的代码
            break;

        case INIT_CHARGE_STEP_CHECK_CHARGE_RESULT:
            // 检查充电结果的代码
            break;

        case INIT_CHARGE_STEP_DELAY_WAIT_2:
            // 延时等待2的代码
            break;

        case INIT_CHARGE_STEP_STOP_PCS:
            // 停止PCS的代码
            break;

        case INIT_CHARGE_STEP_HMI_FEEDBACK_3:
            // HMI反馈3的代码
            break;

        case INIT_CHARGE_STEP_GO_TO_STANDBY:
            // 转入待机的代码
            break;

        default:
            // 未知步骤的处理
            break;
    }
}

/**
 * @Description: 待机模式
 * @Param:
 * @Return:
 */

STANDBY_STEP current_standby_step = STANDBY_STEP_OPERATE_VALVE;

void handle_start_standby(void)
{
    switch (current_standby_step)
    {
        case STANDBY_STEP_OPERATE_VALVE:
            // 操作阀门的代码
            break;

        case STANDBY_STEP_CHECK_VALVE_STATUS:
            // 检查阀门状态的代码
            break;

        case STANDBY_STEP_OPERATION_TIMEOUT:
            // 操作阀门超时的代码
            break;

        case STANDBY_STEP_START_STRATEGY:
            // 启动策略的代码
            break;

        case STANDBY_STEP_WAIT_FLOW_STABILITY:
            // 等待流量稳定的代码
            break;

        case STANDBY_STEP_STOP_PCS:
            // 停止PCS的代码
            break;

        case STANDBY_STEP_HMI_FEEDBACK_1:
            // HMI反馈1的代码
            break;

        default:
            // 未知步骤的处理
            break;
    }
}

/**
 * @Description: 充电模式
 * @Param:
 * @Return:
 */
STANDARD_CHARGE_STEP current_standard_charge_step = STANDARD_CHARGE_STEP_OPERATE_VALVE;

void handle_start_do_charging(void)
{
    switch (current_standard_charge_step)
    {
        case STANDARD_CHARGE_STEP_OPERATE_VALVE:
            // 操作阀门的代码
            break;

        case STANDARD_CHARGE_STEP_CHECK_VALVE_STATUS:
            // 检查阀门状态的代码
            break;

        case STANDARD_CHARGE_STEP_VALVE_OPERATION_TIMEOUT:
            // 操作阀门超时的代码
            break;

        case STANDARD_CHARGE_STEP_START_STRATEGY:
            // 启动策略的代码
            break;

        case STANDARD_CHARGE_STEP_WAIT_FLOW_STABILITY:
            // 等待流量稳定的代码
            break;

        case STANDARD_CHARGE_STEP_PCS_SET_PARAMS:
            // PCS设定参数的代码
            break;

        case STANDARD_CHARGE_STEP_START_PCS:
            // 启动PCS的代码
            break;

        case STANDARD_CHARGE_STEP_HMI_FEEDBACK_1:
            // HMI反馈1的代码
            break;

        case STANDARD_CHARGE_STEP_CHECK_CHARGE_RESULT_1:
            // 检查充电结果1的代码
            break;

        case STANDARD_CHARGE_STEP_DELAY_WAIT_1:
            // 延时等待1的代码
            break;

        case STANDARD_CHARGE_STEP_PCS_MODIFY_PARAMS:
            // PCS修改参数的代码
            break;

        case STANDARD_CHARGE_STEP_HMI_FEEDBACK_2:
            // HMI反馈2的代码
            break;

        case STANDARD_CHARGE_STEP_CHECK_CHARGE_RESULT_2:
            // 检查充电结果2的代码
            break;

        case STANDARD_CHARGE_STEP_DELAY_WAIT_2:
            // 延时等待2的代码
            break;

        case STANDARD_CHARGE_STEP_STOP_PCS:
            // 停止PCS的代码
            break;

        case STANDARD_CHARGE_STEP_HMI_FEEDBACK_3:
            // HMI反馈3的代码
            break;

        case STANDARD_CHARGE_STEP_STATE_HOLD:
            // 状态保持的代码
            break;

        default:
            // 未知步骤的处理
            break;
    }
}

/**
 * @Description: 放电模式
 * @Param:
 * @Return:
 */

STANDARD_DISCHARGE_STEP current_standard_discharge_step = STANDARD_DISCHARGE_STEP_OPERATE_VALVE;

void handle_start_do_discharging(void)
{
    switch (current_standard_discharge_step)
    {
        case STANDARD_DISCHARGE_STEP_OPERATE_VALVE:
            // 操作阀门的代码
            break;

        case STANDARD_DISCHARGE_STEP_CHECK_VALVE_STATUS:
            // 检查阀门状态的代码
            break;

        case STANDARD_DISCHARGE_STEP_VALVE_OPERATION_TIMEOUT:
            // 操作阀门超时的代码
            break;

        case STANDARD_DISCHARGE_STEP_START_STRATEGY:
            // 启动策略的代码
            break;

        case STANDARD_DISCHARGE_STEP_WAIT_FLOW_STABILITY:
            // 等待流量稳定的代码
            break;

        case STANDARD_DISCHARGE_STEP_CHECK_OCV:
            // 检查OCV的代码
            break;

        case STANDARD_DISCHARGE_STEP_OCV_LOW_HANDLING:
            // OCV低处理的代码
            break;

        case STANDARD_DISCHARGE_STEP_PCS_SET_PARAMS:
            // PCS设定参数的代码
            break;

        case STANDARD_DISCHARGE_STEP_START_PCS:
            // 启动PCS的代码
            break;

        case STANDARD_DISCHARGE_STEP_HMI_FEEDBACK_1:
            // HMI反馈1的代码
            break;

        case STANDARD_DISCHARGE_STEP_CHECK_DISCHARGE_RESULT_1:
            // 检查放电结果1的代码
            break;

        case STANDARD_DISCHARGE_STEP_DELAY_WAIT_1:
            // 延时等待1的代码
            break;

        case STANDARD_DISCHARGE_STEP_PCS_MODIFY_PARAMS:
            // PCS修改参数的代码
            break;

        case STANDARD_DISCHARGE_STEP_HMI_FEEDBACK_2:
            // HMI反馈2的代码
            break;

        case STANDARD_DISCHARGE_STEP_CHECK_DISCHARGE_RESULT_2:
            // 检查放电结果2的代码
            break;

        case STANDARD_DISCHARGE_STEP_DELAY_WAIT_2:
            // 延时等待2的代码
            break;

        case STANDARD_DISCHARGE_STEP_STOP_PCS:
            // 停止PCS的代码
            break;

        case STANDARD_DISCHARGE_STEP_HMI_FEEDBACK_3:
            // HMI反馈3的代码
            break;

        case STANDARD_DISCHARGE_STEP_STATE_HOLD:
            // 状态保持的代码
            break;

        default:
            // 未知步骤的处理
            break;
    }
}

/**
 * @Description: 混液模式
 * @Param:
 * @Return:
 */

MIXING_STEP current_mixing_step = MIXING_STEP_OPERATE_VALVE;

void handle_start_do_liquid_mixing(void)
{
    switch (current_mixing_step)
    {
        case MIXING_STEP_OPERATE_VALVE:
            // 操作阀门的代码
            break;

        case MIXING_STEP_CHECK_VALVE_STATUS:
            // 检查阀门状态的代码
            break;

        case MIXING_STEP_VALVE_OPERATION_TIMEOUT:
            // 操作阀门超时的代码
            break;

        case MIXING_STEP_START_STRATEGY:
            // 启动策略的代码
            break;

        case MIXING_STEP_WAIT_FLOW_STABILITY:
            // 等待流量稳定的代码
            break;

        case MIXING_STEP_CHECK_SHUTDOWN:
            // 检查是否停机的代码
            break;

        case MIXING_STEP_WAIT_SHUTDOWN_COMPLETE:
            // 等待停机完成的代码
            break;

        case MIXING_STEP_DELAY_WAIT_1:
            // 延时等待1的代码
            break;

        case MIXING_STEP_CLOSE_MIX_VALVE:
            // 关闭混液阀的代码
            break;

        case MIXING_STEP_WAIT_MIX_VALVE_CLOSE:
            // 等待混液阀关闭的代码
            break;

        case MIXING_STEP_DELAY_WAIT_2:
            // 延时等待2的代码
            break;

        case MIXING_STEP_HMI_FEEDBACK_1:
            // HMI反馈1的代码
            break;

        default:
            // 未知步骤的处理
            break;
    }
}

/**
 * @Description: 启动模式参数复位
 * @Param:
 * @Return:
 */
void app_do_start_params_reset(void)
{
    ;
}

/**
 * @Description: 启动模式动作切换状态机
 * @Param:
 * @Return:
 */
void app_do_start_runner(void)
{
    switch (current_app_start_mode)
    {
        case START_DO_INITIAL_CHARGE:
            handle_start_do_initial_charge();
            break;
        case START_DO_STANDBY:
            handle_start_standby();
            break;
        case START_DO_CHARGING:
            handle_start_do_charging();
            break;
        case START_DO_DISCHARGING:
            handle_start_do_discharging();
            break;
        case START_DO_LIQUID_MIXING:
            handle_start_do_liquid_mixing();
            break;
        default:
            break;
    }
}